package org.dromara.common.translation.core.impl;

import lombok.AllArgsConstructor;
import org.dromara.common.core.service.UserService;
import org.dromara.common.translation.annotation.TranslationType;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.common.translation.core.TranslationInterface;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：用户名称翻译实现
 */
@AllArgsConstructor
// 指定翻译类型为用户ID转换为昵称
@TranslationType(type = TransConstant.USER_ID_TO_NICKNAME)
/**
 * 昵称翻译实现类
 * 本类实现了TranslationInterface接口，专门用于处理字符串类型的昵称翻译
 * 通过实现翻译接口，定义了一套用于昵称翻译的公共方法和规则
 */
public class NicknameTranslationImpl implements TranslationInterface<String> {

    /**
     * 通用 用户服务
     */
    private final UserService userService;

    /**
     * 根据提供的键值翻译成相应的昵称
     * 此方法的目的是为了从用户服务中获取昵称，根据键的类型不同，处理方式也不同
     * 如果键是长整型，会直接转换为字符串并调用用户服务的查询方法
     * 如果键是字符串，会直接调用用户服务的查询方法
     *
     * @param key 可以是长整型或字符串类型的键值
     * @param other 未使用，为了接口兼容保留
     * @return 返回对应的昵称，如果键的类型不匹配则返回null
     */
    @Override
    public String translation(Object key, String other) {
        // 检查键是否为长整型
        if (key instanceof Long id) {
            // 如果是，转换为字符串并调用用户服务查询昵称的方法
            return userService.selectNicknameByIds(id.toString());
        } else if (key instanceof String ids) {
            // 检查键是否为字符串
            // 如果是，直接调用用户服务查询昵称的方法
            return userService.selectNicknameByIds(ids);
        }
        // 如果键的类型既不是长整型也不是字符串，返回null
        return null;
    }
}
